home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
presto
/
prest1_0.lha
/
Tests
/
barrier
/
barriertest.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-12-11
|
2KB
|
124 lines
//
// This program is intended to test the basic parallel "hello world".
//
#include "presto.h"
#include "barrier.h"
Lock coutLock;
MasterSlaveBarrier *barrier;
#define MAXPROCS 32
int blockcount = 10;
int numslaves = 1;
void
err(char *s)
{
cerr << s << "\n";
exit(1);
}
Main::init()
{
cout << "Initializing\n";
cout.flush();
numprocessors = 1;
quantum = 0;
for (argc--, argv++; *argv && **argv == '-'; argv++, argc--)
switch (*(*argv + 1)) {
case 'q':
quantum = atoi(*argv + 2);
break;
case 'p':
numprocessors = atoi(*argv + 2);
break;
case 'b':
blockcount = atoi(*argv + 2);
break;
case 's':
numslaves = atoi(*argv + 2);
break;
default:
cerr << chr(*(*argv + 1)) << " unknown flag.\n";
return -1;
}
return 0;
}
int
body(int zot)
{
// int i;
// for (i = 0; i < 50; i++);
return zot;
}
void
worker(int pid)
{
int waste;
int i;
for (i=0; i<blockcount; i++) {
coutLock.lock();
cout << "Hello world (" << pid << "[" << (int)(&pid) << "])\n";
cout.flush ();
coutLock.unlock();
// for (waste=0; waste<1000000+200000*((5-pid+i)%5); waste++) ;
for (waste=0; waste<100; waste++) ;
// coutLock.lock();
// cout << "worker " << pid << " arriving at barrier\n";
// cout.flush ();
// coutLock.unlock();
barrier->SlaveArrive ();
// coutLock.lock();
// cout << "worker " << pid << " continuing after barrier\n";
// cout.flush ();
// coutLock.unlock();
}
}
Main::main()
{
int i;
char ch;
Thread *cpus[MAXPROCS];
cout << "Here we go\n";
cout.flush();
barrier = new MasterSlaveBarrier (numslaves);
cout << "Barrier created!\n";
cout.flush();
for (i = 0; i < numslaves; i++) {
char buf[12];
sprintf( buf, "%s.%d", "SLAVE", i );
char *name = new char[ strlen(buf) + 1 ];
strcpy( name, buf );
cpus[i] = new Thread(name);
cpus[i]->willjoin();
cpus[i]->start((Objany)0, (PFany)worker,
(i));
}
for (i=0; i<blockcount; i++) {
barrier->MasterArrive ();
// cout << "Waiting for you...";
// cin >> ch;
barrier->LetSlavesGo ();
}
for (i = 0; i < numslaves; i++) {
cpus[i]->join();
}
cout << "...done.\n";
}